package com.zjb.demo.system.service;

import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.util.DateUtil;
import com.mybatisflex.solon.service.impl.ServiceImpl;
import com.zjb.demo.common.domain.dto.SysLoginInfo;
import com.zjb.demo.system.domain.query.SysLoginInfoPageQuery;
import com.zjb.demo.system.mapper.SysLoginInfoMapper;
import org.noear.solon.annotation.Component;

import java.util.List;

import static com.zjb.demo.common.domain.dto.table.SysLoginInfoTableDef.SYS_LOGIN_INFO;

/**
 * 系统访问日志情况信息 服务层处理
 * @author 庄佳彬
 * @since 2023/12/24 22:25
 */
@Component
public class SysLoginInfoService extends ServiceImpl<SysLoginInfoMapper, SysLoginInfo> {


    /**
     * 分页列表查询
     *
     * @param query 查询条件
     * @return 分页结果
     */
    public Page<SysLoginInfo> pageList(SysLoginInfoPageQuery query) {
        var page = new Page<SysLoginInfo>(query.getPageNum(), query.getPageSize());
        var beginTime = DateUtil.parseDate(query.getBeginTime());
        var endTime = DateUtil.parseDate(query.getEndTime());
        return queryChain()
                .select(SYS_LOGIN_INFO.ALL_COLUMNS)
                .where(SYS_LOGIN_INFO.IPADDR.like(query.getIpaddr()))
                .and(SYS_LOGIN_INFO.STATUS.eq(query.getStatus()))
                .and(SYS_LOGIN_INFO.USER_NAME.like(query.getUsername()))
                .and(SYS_LOGIN_INFO.LOGIN_TIME.ge(beginTime))
                .and(SYS_LOGIN_INFO.LOGIN_TIME.le(endTime))
                .page(page);
    }

    /**
     * 根据指定条件查询登录信息列表
     *
     * @param query 登录信息查询对象
     * @return 符合条件的登录信息列表
     */
    public List<SysLoginInfo> list(SysLoginInfoPageQuery query) {
        var beginTime = DateUtil.parseDate(query.getBeginTime());
        var endTime = DateUtil.parseDate(query.getEndTime());
        return queryChain()
                .select(SYS_LOGIN_INFO.ALL_COLUMNS)
                .where(SYS_LOGIN_INFO.IPADDR.like(query.getIpaddr()))
                .and(SYS_LOGIN_INFO.STATUS.eq(query.getStatus()))
                .and(SYS_LOGIN_INFO.USER_NAME.like(query.getUsername()))
                .and(SYS_LOGIN_INFO.LOGIN_TIME.ge(beginTime))
                .and(SYS_LOGIN_INFO.LOGIN_TIME.le(endTime))
                .list();
    }

    /**
     * 清理方法
     */
    public void clean() {
        mapper.clean();
    }

}

